今天來談Scala的類別是如何操作的
首先我們來定義一個類別
class Person(val name: String, age: Int){ //Constructor
}
定義好之後就可以用new
關鍵字創建物件
val person = new Person("Leonad", 25)
println(person.age) //輸出person的年齡
繼續定義剛剛的class
val person = new Person("Leonard", 25)
println(person.age)
person.greet("Sheldon")
person.greet()
//Constructor
class Person(name: String, val age: Int){
//body
val x = 2
//method
def greet(name: String): Unit = println(s"${this.name}: Hi $name!")
//overloading
def greet(): Unit = println(s"Hi, i am $name")
}
來講解一下
在一個類別定義中,我們會填入field和method(方法),這些被統稱為member(成員)。
field:也就是我們用val
或var
來定義的跟物件有關的變數。
method:用def
定義,裡頭包含可執行的程式。
藉由上面的code,我們來介紹overloading
Overloading簡單來說就是當我們用相同名稱不同型別來定義方法。
所以兩個greet方法的output分別會長這樣:
25
Leonard: Hi Sheldon
Leonard
解釋一下兩個greet方法的差別
第一個greet,假設我們把println裡的${this.name}
改成$name
,即def greet(name: String): Unit = println(s"${this.name}: Hi $name!")
這時輸出會長這樣:
Sheldon: Hi Sheldon
但是我們加了this
之後,這個this.name
就會變成class Person的name參數
第二個greet
雖然我們沒有明確寫出this.name
但程式會默認為這個Person類別的field。
Part1就先講到這邊